package com.smartstate.admin.biz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;

import com.smartstate.admin.biz.entity.bo.User;
import com.smartstate.admin.biz.entity.dto.UserDto;
import com.smartstate.admin.biz.entity.dto.UserSearchDto;
import com.smartstate.admin.biz.entity.vo.LoginUserVo;
import com.smartstate.admin.biz.entity.vo.UserVo;
import com.smartstate.common.base.dto.ExcelExportDto;
import com.smartstate.common.base.httpResult.ResultVO;
import org.springframework.web.multipart.MultipartFile;


import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

public interface UserService {
    /**
     * 获取当前登录用户信息
     */
    LoginUserVo getPrincipal(String ip);

    /**
     * 获取当前登录用户信息
     */
    LoginUserVo getAppPrincipal(String ip);
    /**
     * 根据用户id查询用户
     */
    UserVo loadUserByUserId(String userId);

    /**
     * 根据用户名称查询所有相同用户名的用户
     */
    List<UserVo> findUserVoList(String username);

    /**
     * 用户名和密码登录
     */
    UserVo loginByPassword(String username, String password, String code, String randomStr);

    /**
     * 修改用户
     */
    boolean updateUserInfo(User user);

    /**
     * 删除用户
     */
    boolean deleteUser(String id);

    /**
     * 分页条件查询
     */
    IPage<UserVo> queryUserList(UserSearchDto userSearchDto);

    /**
     * 修改用户状态
     */
    boolean updateStatus(String id, Integer status);

    /**
     * 保存用户
     */
    User saveUser(UserDto userDto);

    /**
     * 修改用户
     */
    boolean updateUser(UserDto userDto);

    /**
     * 判断用户原密码是否正确
     */
    boolean judgePassword(String id, String password);

    /**
     * 批量逻辑删除用户
     */
    boolean deleteBatchUser(List<String> idList);

    /**
     * 修改用户密码
     */
    boolean updatePassword(UserDto userDto);

    /**
     * 判断用户名称是否重复
     */
    Map<String, Object> checkUserName(String username, String id);

    /**
     * 判断用户昵称是否重复
     */
    Map<String, Object> checkNickname(String nickname, String id);

    /**
     * 判断手机是否重复
     */
    Map<String, Object> checkPhone(String phone, String id);

    /**
     * 分配角色
     */
    boolean updateRole(UserDto userDto);

    /**
     * 获取系统所有用户
     */
    List<UserVo> getUserAll();

    List<UserVo> selectBatchUser(List<String> idList);

    String getUserByUserName(String username);
}